package editorsvg.propiedades;

import javax.swing.JComponent;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 * Propiedad que contiene un objeto Integer.
 *
 * @author Jorge Berjano
 */
public class PropiedadNumericaEntera extends Propiedad {
    
    private transient JSlider slider;
    private int minimo;
    private int maximo;

    
    public void rango(int min, int max) {
        minimo = min;
        maximo = max;
    }
    
    @Override
    public Class getClase() {
        return Integer.class;
    }

    public String toString() {
        return getValor().toString();
    }  
        
    public int obtenerNumeroEntero() {
        Object valor = getValor();
        if (valor instanceof Integer)
            return ((Integer) valor).intValue();
        else
            return 0;
    }

    public void asignarNumeroEntero(int valor) {
        setValor(new Integer(valor));
    }

    public JComponent obtenerComponenteModificacion() {
        if (maximo <= minimo) 
            return null;
        
        if (slider == null) {
            slider = new JSlider(minimo, maximo);
            int v = obtenerNumeroEntero();
            slider.setValue(v);
            slider.addChangeListener(new ChangeListener() {
                public void stateChanged(ChangeEvent evento) {
                    SliderAccionado();
                }
            });
        }
        return slider;
    }
    // Si se desliza el slider se actualiza el valor numerico
    private void SliderAccionado() {
        asignarNumeroEntero(slider.getValue());
    }
    
    public boolean permitirEditarTexto() {
        return true;
    }

    public boolean parsearPropiedad(String valorString) {
        
        try {
            int numero = Integer.parseInt(valorString);
            asignarNumeroEntero(numero);
         } catch (NumberFormatException ex) {
            return false;
        }        
        return true;
    }
}
